#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;

void sum_rgb(const cv::Mat& src, cv::Mat& dst) {
    vector<cv::Mat> planes;
    cv::split(src, planes);

    cv::Mat b = planes[0], g = planes[1], r = planes[2];

    // accumulate
    cv::Mat s = cv::Mat::zeros(b.size(), CV_32F);
    cv::accumulate(b, s);
    cv::accumulate(g, s);
    cv::accumulate(r, s);

    // truncate
    cv::threshold(s, s, 100, 100, cv::THRESH_TRUNC);
    s.convertTo(dst, b.type());
}

void help() {
    cout << "Call: ./data/apple.jpg" << endl;
    cout << "Shows use of alpha blending (addWeighted) add threshold" << endl;
}

int main(int argc, char** argv) {
    help();

    if (argc < 2) {
        cout << "specify input image" << endl;
        return -1;
    }
    // load image
    cv::Mat src = cv::imread(argv[1]), dst;
    if (src.empty()) {
        cout << "can not load " << argv[1] << endl;
        return -1;
    }
    sum_rgb(src, dst);

    // show
    cv::imshow(argv[1], dst);

    cv::waitKey(0);

    return 0;
}